﻿Imports System.Data.OleDb
Public Class frmFacturacion

    Dim coneccion As OleDbConnection
    Public subTotal As Double = 0

    Private Sub frmFacturacion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        lblFecha.Text = CDate(Now.Date)

        txtNombreEmpleado.Text = bd.NombreEmpleado & " " & bd.ApellidoEmpleado


        dgvFacturacion.RowHeadersVisible = False

        dgvFacturacion.Columns.Add("columCodigo", "Codigo")
        dgvFacturacion.Columns.Add("columProducto", "Producto")
        dgvFacturacion.Columns.Add("columUnitario", "Precio Unitario")
        dgvFacturacion.Columns.Add("columCantidad", "Cantidad")
        dgvFacturacion.Columns.Add("columPrecio", "Precio")

        dgvFacturacion.Columns(0).ReadOnly = True
        dgvFacturacion.Columns(1).ReadOnly = True
        dgvFacturacion.Columns(2).ReadOnly = True
        dgvFacturacion.Columns(3).ReadOnly = True
        dgvFacturacion.Columns(4).ReadOnly = True

        dgvFacturacion.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill

        dgvFacturacion.ClearSelection()

    End Sub

    Private Sub txtProducto_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtProducto.KeyDown
        If e.KeyCode = Keys.F1 Then
            frmMuestraProductos.Show()
            txtProducto.Clear()
        End If
        If e.KeyCode = Keys.Enter Then
            bd.Inventario("productoEspecifico", txtProducto.Text, "ingresaProductoFactura")
            txtProducto.Clear()
            txtCantidad.Text = 1
            btnFacturar.Enabled = True
        End If
    End Sub

    Private Sub txtCliente_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        If e.KeyCode = Keys.F1 Then
            frmMuestraProductos.Show()
            txtProducto.Clear()
        End If
    End Sub

    Private Sub txtCantidad_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtCantidad.KeyDown
        If e.KeyCode = Keys.Enter Then
            bd.Inventario("productoEspecifico", txtProducto.Text, "ingresaProductoFactura")
            txtProducto.Clear()
            txtCantidad.Text = 1
            txtProducto.Focus()
            btnFacturar.Enabled = True
        End If
    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click

        If subTotal = 0 Then
            MsgBox("No hay Registros que elminar")
        Else
            subTotal = subTotal - CDbl(dgvFacturacion.Rows(dgvFacturacion.CurrentRow.Index).Cells(4).Value)
            txtSubTotal.Text = subTotal
            dgvFacturacion.Rows.RemoveAt(dgvFacturacion.CurrentRow.Index)
            If subTotal = 0 Then
                btnFacturar.Enabled = False
            End If
        End If

    End Sub

    Private Sub txtDescuento_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDescuento.TextChanged
        If Char.IsNumber(txtDescuento.Text) Then
            If txtDescuento.Text > 100 Then
                MsgBox("El Descuento no puede exeder el 100%")
                txtDescuento.Text = 0
                txtDescuento.SelectAll()
            Else
                txtTotalDescuento.Text = txtSubTotal.Text * (txtDescuento.Text / 100)
                txtTotalImpuestoVenta.Text = (CDbl(txtSubTotal.Text) - CDbl(txtTotalDescuento.Text)) * (txtIV.Text / 100)
                txtTotal.Text = CDbl(txtSubTotal.Text) + CDbl(txtTotalImpuestoVenta.Text) - CDbl(txtTotalDescuento.Text)
            End If
        Else
            txtDescuento.Text = 0
        End If

    End Sub

    Private Sub txtIV_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtIV.TextChanged
        If Char.IsNumber(txtIV.Text) Then
            txtTotalImpuestoVenta.Text = (CDbl(txtSubTotal.Text) - CDbl(txtTotalDescuento.Text)) * (txtIV.Text / 100)
        Else
            txtIV.Text = 13
            txtTotalImpuestoVenta.Text = (CDbl(txtSubTotal.Text) - CDbl(txtTotalDescuento.Text)) * (txtIV.Text / 100)
        End If
        txtTotal.Text = CDbl(txtSubTotal.Text) + CDbl(txtTotalImpuestoVenta.Text) - CDbl(txtTotalDescuento.Text)
    End Sub

    Private Sub txtSubTotal_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSubTotal.TextChanged
        If txtSubTotal.Text <> 0 Then
            txtTotalDescuento.Text = txtSubTotal.Text * (txtDescuento.Text / 100)
            txtTotalImpuestoVenta.Text = txtSubTotal.Text * (txtIV.Text / 100)
            txtTotal.Text = CDbl(txtSubTotal.Text) + CDbl(txtTotalImpuestoVenta.Text) - CDbl(txtTotalDescuento.Text)
        Else
            txtTotalDescuento.Text = 0
            txtTotalImpuestoVenta.Text = 0
            txtTotal.Text = 0
        End If
    End Sub

    Private Sub btnFacturar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFacturar.Click
        Dim command As OleDbCommand
        Dim miDataSet As New DataSet
        Dim adaptador As New OleDb.OleDbDataAdapter

        Dim numeroFactura As Integer

        Dim sql As String = "SELECT MAX(NumeroFactura) FROM encabezado_Factura"
        adaptador = New OleDbDataAdapter(sql, bd.sConexion)
        miDataSet = New DataSet
        adaptador.Fill(miDataSet, "facturacion")

        If IsDBNull(miDataSet.Tables(0).Rows(0).Item(0)) Then
            numeroFactura = 1
        Else
            numeroFactura = (miDataSet.Tables(0).Rows(0).Item(0)) + 1
        End If

        Dim generaFactura As String = "Insert into encabezado_Factura (NumeroFactura,Cedula,FechaFactura,Subtotal,PorcentajeDescuento, MontoDescuento,PorcentajeImpuesto,MontoImpuesto,TotalFactura,Estatus) values(" & numeroFactura & ",'" & bd.id & "','" & CDate(Now).Date & "',@SUBTOTAL,@DESCUENTO,@TOTALDESCUENTO,@IV,@TOTALIV,@TOTAL,'Cancelada')"
        coneccion = New OleDbConnection(bd.sConexion)
        command = New OleDbCommand(generaFactura, coneccion)

        command.Parameters.Add(New OleDbParameter("@SUBTOTAL", OleDbType.Double))
        command.Parameters("@SUBTOTAL").Value = CDbl(txtSubTotal.Text)
        command.Parameters.Add(New OleDbParameter("@DESCUENTO", OleDbType.Double))
        command.Parameters("@DESCUENTO").Value = CDbl(txtDescuento.Text)
        command.Parameters.Add(New OleDbParameter("@TOTALDESCUENTO", OleDbType.Double))
        command.Parameters("@TOTALDESCUENTO").Value = CDbl(txtTotalDescuento.Text)
        command.Parameters.Add(New OleDbParameter("@IV", OleDbType.Double))
        command.Parameters("@IV").Value = CDbl(txtIV.Text)
        command.Parameters.Add(New OleDbParameter("@TOTALIV", OleDbType.Double))
        command.Parameters("@TOTALIV").Value = CDbl(txtTotalImpuestoVenta.Text)
        command.Parameters.Add(New OleDbParameter("@TOTAL", OleDbType.Double))
        command.Parameters("@TOTAL").Value = CDbl(txtTotal.Text)

        command.Connection.Open()
        Dim resultado As Integer = command.ExecuteNonQuery()
        command.Connection.Close()

        'MsgBox(resultado)

        For Each record As DataGridViewRow In dgvFacturacion.Rows

            Dim detalleFactura As String = "Insert into detalle_factura (NumeroFactura,idCodigoProducto,NombreProducto,PrecioUnitario,Cantidad,PrecioTotal) values(" & numeroFactura & ",'" & record.Cells(0).Value() & "','" & record.Cells(1).Value() & "', @PRECIOUNITARIO, @CANTIDAD, @PRECIOTOTAL)"
            coneccion = New OleDbConnection(bd.sConexion)
            command = New OleDbCommand(detalleFactura, coneccion)

            command.Parameters.Add(New OleDbParameter("@PRECIOUNITARIO", OleDbType.Double))
            command.Parameters("@PRECIOUNITARIO").Value = record.Cells(2).Value()
            command.Parameters.Add(New OleDbParameter("@CANTIDAD", OleDbType.Double))
            command.Parameters("@CANTIDAD").Value = record.Cells(3).Value()
            command.Parameters.Add(New OleDbParameter("@PRECIOTOTAL", OleDbType.Double))
            command.Parameters("@PRECIOTOTAL").Value = record.Cells(4).Value()
            command.Connection.Open()
            command.ExecuteNonQuery()
            command.Connection.Close()


            Dim miDataSet2 As New DataSet
            Dim adaptador2 As New OleDb.OleDbDataAdapter
            Dim cantidadProducto As String = ("SELECT Cantidad FROM Inventario WHERE idCodigoProducto = '" & record.Cells(0).Value() & "'")
            adaptador2 = New OleDbDataAdapter(cantidadProducto, cn)
            miDataSet2 = New DataSet
            adaptador2.Fill(miDataSet2, "Inventario")
            Dim cantidadEnInventario As Integer = CInt(miDataSet2.Tables(0).Rows(0).Item(0)) - 1

            Dim actualizaProducto As String = "UPDATE inventario set Cantidad = " & cantidadEnInventario & " where idCodigoProducto = '" & record.Cells(0).Value() & "'"
            command = New OleDbCommand(actualizaProducto, coneccion)
            command.Connection.Open()
            Dim x = command.ExecuteNonQuery()
            command.Connection.Close()

        Next

        btnFacturar.Enabled = False

        frmVuelto.Show()
        frmVuelto.txtMonto.Text = txtTotal.Text
        Me.Enabled = False
        
        dgvFacturacion.Rows.Clear()
        subTotal = 0
        txtSubTotal.Text = 0
        txtDescuento.Text = 0
        txtTotalDescuento.Text = 0
        txtIV.Text = 13
        txtTotalImpuestoVenta.Text = 0
        txtTotal.Text = 0
        
    End Sub

    Private Sub btnListaProducto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListaProducto.Click
        frmMuestraProductos.Show()
        txtProducto.Clear()
    End Sub

    Private Sub dgvFacturacion_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvFacturacion.CellEndEdit
        Dim nuevaCantidad = dgvFacturacion.CurrentCell.Value
        Dim precioUnitario = dgvFacturacion(2, dgvFacturacion.CurrentRow.Index).Value
        Dim nuevoPrecioXCantidad = nuevaCantidad * precioUnitario
        dgvFacturacion(4, dgvFacturacion.CurrentRow.Index).Value = nuevoPrecioXCantidad
    End Sub
End Class